<?php

class AnuncioserviceComponent extends Component{
	
	var $criterios = array();
	var $dados = array();
	var $order;
	var $Anuncio;
	var $paginate = array('limit'=>5);
	
	function initialize(){
		$this->Anuncio = ClassRegistry::init('Anuncio');
		$this->Especial = ClassRegistry::init('Especial');
	}
	function startup(){
		
	}
	function shutdown(){
		
	}
	function beforeRender(){
		
	}
	
	public function top ($id_cidades = null) {
		$this->Especial->recursive = 2;
		if($id_cidades != null) 
			$all = $this->Especial->find('all', (array('conditions'=> array('cidade_id'=>$id_cidades), 'limit'=>2, 'order'=>'rand()')));
		else $all = $this->Especial->find('all', array('limit'=>2, 'order'=>'rand()'));
		if(empty($all))
			return null;
			
		$array = null;
		foreach ($all as $anuncio) {
			if ($anuncio['Especial']['tipo_de_anuncio'] == 1){
				$array[]['Anuncio'] = $anuncio['Anuncios'];
				$anuncio['Especial']['visualizacoes']++;
				$this->Especial->save($anuncio['Especial']);
			}
		}
		return $array;
	}
	
	private function preparaDados($dados, $id_cidade = null){
		$this->dados = $dados['Anuncio'];
		$this->cafe();
		$this->tipo();
		$this->almoco();
		$this->jantar();
		$this->lavadora();
		$this->internet();
		$this->quarto_indiv();
		$this->distancia();
		$this->preco();
		$this->cidade($id_cidade);
		$this->ativo();
		$this->ordenacao();
	}
	
	public function buscaComplexaConditions($dados, $id_cidade = null){
		$this->preparaDados($dados, $id_cidade);
		return $this->criterios;
	}
	
	public function buscaComplexa($dados, $id_cidade = null){
		$this->preparaDados($dados, $id_cidade);
		return( $this->Anuncio->paginate('all', array('conditions'=>$this->criterios, 'order'=>$this->order)));
	}
	
	private function ativo(){
		$this->criterios['Anuncio.ativo'] = 1;
	}
	
	private function cidade($id_cidade){
		if($id_cidade != null)
			$this->criterios['cidade_id'] = $id_cidade;
	}
	
	private function cafe(){
		if($this->dados['cafe_da_manha'])
			$this->criterios['cafe_da_manha'] = 1;
	}
	
	private function tipo(){
		if($this->dados['tipo_de_estadia'])
			$this->criterios['tipo_de_estadia'] = $this->dados['tipo_de_estadia'];
	}
	
	private function almoco(){
		if($this->dados['almoco'])
			$this->criterios['almoco'] = 1;
	}
	
	private function jantar(){
		if($this->dados['jantar'])
			$this->criterios['jantar'] = 1;
	}
	
	private function internet(){
		if($this->dados['internet'])
			$this->criterios['internet'] = 1;
	}
	
	private function lavadora(){
		if($this->dados['lavadora'])
			$this->criterios['lavadora'] = 1;
	}
	
	private function quarto_indiv(){
		if($this->dados['quarto_ind'])
			$this->criterios['quarto_ind'] = 1;
	}
	
	private function distancia(){
		if($this->dados['distancia_do_estadio'] != 0 && $this->dados['distancia_do_estadio'] != 4){
			$this->criterios['distancia_do_estadio <='] = $this->dados['distancia_do_estadio']*10;
		}
	}
	
	private function ordenacao(){
		if($this->dados['ordenacao'] === "diariaC")
			$this->order = "preco_diaria ASC, RAND()";
		else if($this->dados['ordenacao'] === "diariaD")
			$this->order = "preco_diaria DESC, RAND(),";
		else if($this->dados['ordenacao'] === "distanciaC")
			$this->order = "distancia_do_estadio ASC, RAND(),";
		else if($this->dados['ordenacao'] === "distanciaD")
			$this->order = "distancia_do_estadio DESC, RAND(),";
		else
			$this->order = "RAND()";
	}
	
	private function preco(){
		if(!empty($this->dados['preco_diaria'])){
			if($this->dados['tipo'] === "igualA")
				$this->criterios['preco_diaria'] = $this->dados['preco_diaria'];
			else if($this->dados['tipo'] === "maximo")
				$this->criterios['preco_diaria <='] = $this->dados['preco_diaria'];
			else if($this->dados['tipo'] === "minimo")
				$this->criterios['preco_diaria >='] = $this->dados['preco_diaria'];
		}
	}	
}

